﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Validation;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
using System.Text.RegularExpressions;

namespace Domain
{
    [HasSelfValidation]
    public class Usuario : Operador
    {
        [StringLengthValidator(0, 50, MessageTemplate = "Debe ingresar un nombre")]
        public string Nombre {get;set;}
        
        [StringLengthValidator(0, 50, MessageTemplate = "Debe especificar un apellido")]
        public string Apellido { get; set; }

        public long? PIN { get; set; }

        public List<Asociacion> Asociaciones { get; set; }

        public List<Asociacion> AsociacionesActivas { get {
            return (from Asociacion a in this.Asociaciones
                    where !a.FechaBajaAsociacion.HasValue
                    select a).ToList();
        } }

        public List<Consumo> Consumos { get; set; }

        public Usuario() { }

        public Usuario(long _UserName, string _Password, string _EMail, string _Nombre,
                      string _Apellido, long? _PIN, List<Asociacion> _Asociaciones, List<Consumo> _Consumos)
            : base(_UserName, _Password, _EMail)
        {
            this.Nombre = _Nombre;
            this.Apellido = _Apellido;
            this.PIN = _PIN;
            this.Asociaciones = _Asociaciones;
            this.Consumos = _Consumos;
        }

        [SelfValidation]
        public void Check_UserName(ValidationResults results)
        {
            if (UserName <= 10000000 || UserName > 99999999)
            {
                results.AddResult(new ValidationResult("Debe especificar un DNI", UserName, string.Empty, string.Empty, null));

            }
        }

        [SelfValidation]
        public void Check_PIN(ValidationResults results)
        {
            if (PIN.HasValue && (PIN.Value <= 0 || PIN.Value > 99999 || PIN.Value < 10000))
            {
                results.AddResult(new ValidationResult("El PIN especificado no es válido, debe ser de 5 dígitos", PIN, string.Empty, string.Empty, null));

            }
        }

    }
}
